<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var data = [{
            id: 1,
            name: '家电',
            goods: [{
                id: 11,
                gname: '冰箱',
                goods: [{
                    id: 111,
                    name: "海尔"
                }]
            }, {
                id: 12,
                gname: '洗衣机'
            }]
        }, {
            id: 2,
            name: '服饰'
        }];
        // 我们想要做输入id号，就可以返回数据对象
        // 1. 利用forEach 去遍历里面的每一个对象
        function getID(json, id) {
            var o = {};
            json.forEach(function(value) {
                // 当遍历第一层时，如果id 相同就输出对象
                if (id == value.id) {
                    o = value;
                    return o; //当再调用时需要一个返回值，返回给调用函数
                } else if (value.goods &&
                    value.goods.length > 0) {
                    // 当第一层找不到时，就遍历第二层
                    // 也就是有goods属性的并且不为空的(数组长度大于0)
                    o = getID(value.goods, id); //再调用一次getID函数，不过遍历的数组变成了value.goods
                    // 把返回值赋值给o
                }
            });
            // 这里的递归函数在forEach里面，又有if else条件控制，并且数组长度有限制，但不满足条件是就不递归，相当于加了一个退出条件
            return o;
        }
        console.log(getID(data, 1));
        console.log(getID(data, 2));
        console.log(getID(data, 11));
        console.log(getID(data, 12));
        console.log(getID(data, 111));
    </script>
</body>

</html>